package meta.entidad.comun.control.prueba;

import adalid.core.Key;
import adalid.core.annotations.*;
import adalid.core.enums.*;
import adalid.core.interfaces.*;
import adalid.core.properties.StringProperty;
import java.lang.reflect.Field;
import meta.entidad.base.PersistentEntityBase;
import meta.proyecto.base.ProyectoBase;

/**
 * @author Jorge Campins
 */
@EntityClass(independent = Kleenean.FALSE, resourceType = ResourceType.TESTING, resourceGender = ResourceGender.MASCULINE)
@EntitySelectOperation(enabled = Kleenean.TRUE)
@EntityInsertOperation(enabled = Kleenean.TRUE)
@EntityUpdateOperation(enabled = Kleenean.TRUE)
@EntityDeleteOperation(enabled = Kleenean.TRUE)
@EntityTableView(enabled = Kleenean.TRUE, inserts = Kleenean.FALSE)
@EntityDetailView(enabled = Kleenean.FALSE)
@EntityTreeView(enabled = Kleenean.FALSE)
@EntityConsoleView(enabled = Kleenean.TRUE)
@EntityDataGen(start = 1, stop = 10, step = 0)
public class ParteAmbientePrueba extends PersistentEntityBase {

    // <editor-fold defaultstate="collapsed" desc="class constructors">
    @Deprecated
    private ParteAmbientePrueba() {
        this(null, null);
    }

    public ParteAmbientePrueba(Artifact declaringArtifact, Field declaringField) {
        super(declaringArtifact, declaringField);
    }
    // </editor-fold>

    @Override
    protected void settleAttributes() {
        super.settleAttributes();
        setSchema(ProyectoBase.getEsquemaEntidadesComunes());
        setDefaultLabel("parte de ambiente de prueba");
        setDefaultShortLabel("parte de ambiente");
        setDefaultCollectionLabel("partes de ambientes de prueba");
        setDefaultCollectionShortLabel("partes de ambientes");
        setDefaultCollectionLabel(ambiente, "piezas del ambiente de prueba");
        setDefaultCollectionShortLabel(ambiente, "piezas");
        setDefaultCollectionLabel(pieza, "ambientes de prueba por pieza");
        setDefaultCollectionShortLabel(pieza, "ambientes");
    }

    @ColumnField(nullable = Kleenean.FALSE)
    @ForeignKey(onDelete = OnDeleteAction.NONE, onUpdate = OnUpdateAction.NONE)
    @ManyToOne(navigability = Navigability.UNIDIRECTIONAL, view = MasterDetailView.TABLE)
    @PropertyField(create = Kleenean.TRUE, update = Kleenean.TRUE, table = Kleenean.TRUE, report = Kleenean.TRUE)
    public AmbientePrueba ambiente;

    @Allocation(maxDepth = 2, maxRound = 0)
    @ColumnField(nullable = Kleenean.FALSE)
    @ForeignKey(onDelete = OnDeleteAction.NONE, onUpdate = OnUpdateAction.NONE)
    @ManyToOne(navigability = Navigability.UNIDIRECTIONAL, view = MasterDetailView.NONE)
    @PropertyField(create = Kleenean.TRUE, update = Kleenean.TRUE, table = Kleenean.TRUE, report = Kleenean.TRUE)
    public PiezaAmbientePrueba pieza;

    @StringField(maxLength = 30)
    @PropertyField(create = Kleenean.TRUE, update = Kleenean.TRUE, table = Kleenean.TRUE, report = Kleenean.TRUE)
    public StringProperty version_implementacion;

    @Override
    protected void settleProperties() {
        super.settleProperties();
        version_implementacion.setDefaultLabel("versión implementación");
        version_implementacion.setDefaultShortLabel("versión");
    }

    Key key1;

    @Override
    protected void settleKeys() {
        super.settleKeys();
        key1.setUnique(true);
        key1.newKeyField(ambiente, pieza);
    }

    @Override
    protected void settleFilters() {
        super.settleFilters();
        version_implementacion.setRequiringFilter(pieza.tipo.isEqualTo(pieza.tipo.SOFTWARE));
    }

}
